import { ElNotification, ElMessageBox } from "element-plus";
import nprogress from "nprogress";

// 消息提示
export function toast(
  message,
  type = "success",
  dangerouslyUseHTMLString = true,
) {
  ElNotification({
    message,
    type,
    dangerouslyUseHTMLString,
    duration: 3000,
  });
}

export function showModal(content = "提示内容", type = "warning", title = "") {
  return ElMessageBox.confirm(content, title, {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type,
  });
}

// 显示全屏loading
export function showFullLoading() {
  nprogress.start();
}

// 隐藏全屏loading
export function hideFullLoading() {
  nprogress.done();
}

// 弹出输入框
export function showPrompt(tip, value = "") {
  return ElMessageBox.prompt(tip, "", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    inputValue: value, // inputValue是input-value的驼峰写法
  });
}

// 将query对象转url参数
export function queryParams(query) {
  let q = [];
  for (const key in query) {
    if (query[key]) {
      q.push(`${key}=${encodeURIComponent(query[key])}`);
    }
  }
  // 拼接出来的就是类似limit=10&keyword=ceshi的效果，前面再加上问好
  let r = q.join("&");
  r = r ? "?" + r : "";
  return r;
}

// 上移
export function useArrayMoveUp(arr, index) {
  swapArray(arr, index, index - 1);
}

// 下移
export function useArrayMoveDown(arr, index) {
  swapArray(arr, index, index + 1);
}

// "13.23.多SKU规格功能-排序规格选项（1）" 讲解的
// 数组[1,2,3,4] 需求：1和2互换位置
// 实现过程：
// [2,2,3,4] 先把1替换成2
// [2,1,3,4] 再把2替换成1
// arr 当前数组 index1 调换之前的位置 index2调换之后的位置
function swapArray(arr, index1, index2) {
  // 调换之后的位置的值替换成，调换之前的位置的值
  arr[index1] = arr.splice(index2, 1, arr[index1])[0];
  return arr;
}

// sku排列算法
// 转换前：
// [
//   [
//     {"value":"绿色"},
//     {"value":"黄色"}
//   ],
//   [
//     {"value":"M"},
//     {"value":"L"}
//   ]
// ]

// 转化后：
// [
//   [
//     {"value":"绿色"},
//     {"value":"M"}
//   ],
//   [
//     {"value":"绿色"},
//     {"value":"L"}
//   ]
// ]
export function cartesianProductOf() {
  return Array.prototype.reduce.call(
    arguments,
    function (a, b) {
      var ret = [];
      a.forEach(function (a) {
        b.forEach(function (b) {
          ret.push(a.concat([b]));
        });
      });
      return ret;
    },
    [[]],
  );
}
